﻿using System;
using Sinacor.Infra.UI.Common;

namespace Sinacor.UI.Bovespa.Ordens.Model
{
    /// <summary>
    /// Model Class - AjusteMercadoFuturo
    /// </summary>
    [Serializable]
    public class AjusteMercadoFuturo : BaseModel
    {
        #region Atributos

        private System.Decimal? _ajusteAplicado;
        private System.Int32 _anoPregao;
        private System.String _codigoNegociacao;
        private System.DateTime _dataPregao;
        private System.Decimal? _fator;
        private System.Decimal? _precoExercicio;
        private Enum.TipoMercado _tipo;
        private System.Decimal? _valorAjusteAnterior;
        private System.Decimal? _valorAjusteAtual;
        private System.Decimal? _variacao;

        #endregion

        #region Propriedades

        /// <summary>
        /// ValorAjusteAtual - ValorAjusteAnterior
        /// </summary>
        public System.Decimal? AjusteAplicado
        {
            get
            {
                if (_valorAjusteAtual.HasValue && _valorAjusteAnterior.HasValue)
                    _ajusteAplicado = _valorAjusteAtual - _valorAjusteAnterior;

                return _ajusteAplicado;
            }
            set { SetValue<System.Decimal?>("AjusteAplicado", ref _ajusteAplicado, value); }
        }

        /// <summary>
        /// Ano do Pregão
        /// </summary>
        public System.Int32 AnoPregao
        {
            get
            {
                _anoPregao = _dataPregao.Year;
                return _anoPregao;
            }
            set { SetValue<System.Int32>("AnoPregao", ref _anoPregao, value); }
        }

        /// <summary>
        /// Código de Negociação
        /// </summary>
        public System.String CodigoNegociacao
        {
            get { return _codigoNegociacao; }
            set { SetValue<System.String>("CodigoNegociacao", ref _codigoNegociacao, value); }
        }

        /// <summary>
        /// Data do Pregão
        /// </summary>
        public System.DateTime DataPregao
        {
            get { return _dataPregao; }
            set { SetValue<System.DateTime>("DataPregao", ref _dataPregao, value); }
        }

        /// <summary>
        /// Fator
        /// </summary>
        public System.Decimal? Fator
        {
            get { return _fator; }
            set { SetValue<System.Decimal?>("Fator", ref _fator, value); }
        }

        /// <summary>
        /// Preço do Exercício
        /// </summary>
        public System.Decimal? PrecoExercicio
        {
            get { return _precoExercicio; }
            set { SetValue<System.Decimal?>("PrecoExercicio", ref _precoExercicio, value); }
        }

        /// <summary>
        /// Tipo
        /// </summary>
        public Enum.TipoMercado Tipo
        {
            get { return _tipo; }
            set { SetValue<Enum.TipoMercado>("Tipo", ref _tipo, value); }
        }

        /// <summary>
        /// Ajuste D - 1
        /// </summary>
        public System.Decimal? ValorAjusteAnterior
        {
            get { return _valorAjusteAnterior; }
            set { SetValue<System.Decimal?>("ValorAjusteAnterior", ref _valorAjusteAnterior, value); }
        }

        /// <summary>
        /// Ajuste D + 0
        /// </summary>
        public System.Decimal? ValorAjusteAtual
        {
            get { return _valorAjusteAtual; }
            set { SetValue<System.Decimal?>("ValorAjusteAtual", ref _valorAjusteAtual, value); }
        }

        /// <summary>
        /// Variação
        /// </summary>
        public System.Decimal? Variacao
        {
            get { return _variacao; }
            set { SetValue<System.Decimal?>("Variacao", ref _variacao, value); }
        }

        #endregion
    }
}